<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文帮助: (错误) 信息及解释</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/message.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>message</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="message.txt">message.txt</a> </b>   适用于 Vim 9.0 版本。   最近更新: 2023年2月


                  <code class="vim">VIM 参考手册    by Bram Moolenaar</code>
                                <code class="vim">译者</code>: Willis、tocer


本文件包含一个 Vim 产生的消息和错误信息按字母排序的列表。如果你不理解消息的含
义，可以在这里查找。不过，本列表未必完整。

1. 以前的消息            <a href="message.html#:messages">:messages</a> 
2. 错误信息              <a href="message.html#error-messages">error-messages</a> 
3. 消息                  <a href="message.html#messages">messages</a> 

</section><hr class="doubleline" /><section class=inner>
<h4>1. 以前的消息                   <b class="vimtag"> <a name=":messages">:messages</a> </b> <b class="vimtag"> <a name=":mes">:mes</a> </b> <b class="vimtag"> <a name="message-history">message-history</a> </b></h4>
:messages" 命令可以查看以前给出的消息。根据 <a href="options.html#'shortmess'">'shortmess'</a> 选项的设置，消息可能被
覆盖或者截断。这时该命令尤其有用。

        :mes[sages]             显示所有消息。

        :<code class="special">{count}</code>mes[sages]      显示 <code class="special">{count}</code> 个最近的消息。

        :mes[sages] clear       清除所有消息。

        :<code class="special">{count}</code>mes[sages] clear
                                清除消息，只保留 <code class="special">{count}</code> 个最近的消息。

记住的消息数目固定是 200。

                                                                <b class="vimtag"> <a name="g%3C">g&lt;</a> </b>
这个命令用于察看前一个命令输出的最后一页。如果你在提示按回车的时候不小心按了空
格 <code class="special">&lt;Space&gt;</code> 键，那么该命令尤其有用。此时你将回到输入回车的提示画面，并可重新回
滚。
<code class="note">注意</code>: 如果在提示显示更多信息时使用 "q" 停止输出，那么只显示已输出的那部分显
示。当另一个命令输出结果时，会清空前一个命令的输出。
不重定向 "g&lt;" 的输出。

如果使用翻译的消息，显示的第一行会告诉你谁维护这个消息翻译。如果你发现问题，可
以联系该维护者。

如果你想要查找特定 (错误) 消息，使用消息开始的 ID 号。比如，要得到下面消息的帮
助:

<code class="section">        E72: Close error on swap file </code>

或者 (经翻译的):

<code class="section">        E72: Errore durante chiusura swap file </code>

使用: 
<code class="example"></code>
<code class="example">        :help E72</code>
<code class="example"></code>
如果你很忙，不按 shift 键也可以: 
<code class="example"></code>
<code class="example">        :help e72</code>
<code class="example"></code>
ID 的数字并没有特殊含义。

</section><hr class="doubleline" /><section class=inner>
<h4>2. 错误信息                                     <b class="vimtag"> <a name="error-messages">error-messages</a> </b> <b class="vimtag"> <a name="errors">errors</a> </b></h4>
显示的错误信息，如果在你没读到之前就已经消失了，你可以这样重新看到: 
<code class="example">  :echo errmsg</code>
或者查看最近的消息列表: 
<code class="example">  :messages</code>
见上  <a href="message.html#:messages">:messages</a> 。


消 息 列 表
                        <b class="vimtag"> <a name="E222">E222</a> </b> <b class="vimtag"> <a name="E228">E228</a> </b> <b class="vimtag"> <a name="E232">E232</a> </b> <b class="vimtag"> <a name="E293">E293</a> </b> <b class="vimtag"> <a name="E298">E298</a> </b> <b class="vimtag"> <a name="E304">E304</a> </b> <b class="vimtag"> <a name="E317">E317</a> </b>
                        <b class="vimtag"> <a name="E318">E318</a> </b> <b class="vimtag"> <a name="E356">E356</a> </b> <b class="vimtag"> <a name="E438">E438</a> </b> <b class="vimtag"> <a name="E439">E439</a> </b> <b class="vimtag"> <a name="E440">E440</a> </b> <b class="vimtag"> <a name="E316">E316</a> </b> <b class="vimtag"> <a name="E320">E320</a> </b> <b class="vimtag"> <a name="E322">E322</a> </b>
                        <b class="vimtag"> <a name="E323">E323</a> </b> <b class="vimtag"> <a name="E341">E341</a> </b> <b class="vimtag"> <a name="E473">E473</a> </b> <b class="vimtag"> <a name="E570">E570</a> </b> <b class="vimtag"> <a name="E685">E685</a> </b> <b class="vimtag"> <a name="E292">E292</a> </b>
<code class="section">  Add to read buffer </code>
<code class="section">  makemap: Illegal mode </code>
<code class="section">  Cannot create BalloonEval with both message and callback </code>
<code class="section">  block was not locked </code>
<code class="section">  Didn't get block nr <code class="special">{N}</code>? </code>
<code class="section">  ml_upd_block0(): Didn't get block 0?? </code>
<code class="section">  pointer block id wrong <code class="special">{N}</code> </code>
<code class="section">  Updated too many blocks? </code>
<code class="section">  get_varp ERROR </code>
<code class="section">  u_undo: line numbers wrong </code>
<code class="section">  undo list corrupt </code>
<code class="section">  undo line missing </code>
<code class="section">  ml_get: cannot find line <code class="special">{N}</code> in buffer <code class="special">{nr}</code> <code class="special">{name}</code> </code>
<code class="section">  line number out of range: <code class="special">{N}</code> past the end </code>
<code class="section">  line count wrong in block <code class="special">{N}</code> </code>
<code class="section">  Internal error: lalloc(0, ) </code>
<code class="section">  Internal error: <code class="special">{function}</code> </code>
<code class="section">  Internal error in regexp </code>
<code class="section">  fatal error in cs_manage_matches </code>
<code class="section">  Invalid count for del_bytes(): <code class="special">{N}</code> </code>

内部错误。如果你能够使之重现，请发送漏洞报告。 <a href="intro.html#bugs">bugs</a> 


<code class="section">  ATTENTION </code>
<code class="section">  Found a swap file by the name ... </code>

见  <a href="usr_11.html#ATTENTION">ATTENTION</a> 。

                                                        <b class="vimtag"> <a name="E92">E92</a> </b>
<code class="section">  Buffer <code class="special">{N}</code> not found </code>

你请求的缓冲区不存在。在你清除了一个缓冲区，而它包含一个位置标记或者有其它途径
还被引用的时候，也会出现这个错误。                        <a href="windows.html#:bwipeout">:bwipeout</a> 

                                                        <b class="vimtag"> <a name="E95">E95</a> </b>
<code class="section">  Buffer with this name already exists </code>

你不能有两个同名的缓冲区。

                                                        <b class="vimtag"> <a name="E72">E72</a> </b>
<code class="section">  Close error on swap file </code>

用来保存编辑文本的备份的  <a href="recover.html#swap-file">swap-file</a>  不能被正确关闭。大多数情况下这不会有什么
问题。

                                                        <b class="vimtag"> <a name="E169">E169</a> </b>
<code class="section">  Command too recursive </code>

当 Ex 命令执行了一个 Ex 命令，后者又执行一个 Ex 命令，如此反复的时候，就可能发
生。最多能有 200 层或 <a href="options.html#'maxfuncdepth'">'maxfuncdepth'</a> 的值的较大者。如果超过，很有可能是无穷循
环。可能涉及的命令是  <a href="eval.html#:execute">:execute</a>  或  <a href="repeat.html#:source">:source</a> 。

                                                        <b class="vimtag"> <a name="E254">E254</a> </b>
<code class="section">  Cannot allocate color <code class="special">{name}</code> </code>

颜色名 <code class="special">{name}</code> 未知。多数系统中可用的颜色列表可以参见  <a href="syntax.html#gui-colors">gui-colors</a> 。

                                                        <b class="vimtag"> <a name="E1244">E1244</a> </b>
<code class="section">  Bad color string: <code class="special">{str}</code> </code>

提供的色彩值不符合 #rrggbb 模式

                                                        <b class="vimtag"> <a name="E458">E458</a> </b>
<code class="section">  Cannot allocate colormap entry, some colors may be incorrect </code>

这意味着 Vim 没有足够的颜色可以分配。虽然 Vim 还能运行，但是有的颜色可能不会以
指定的颜色出现。试试停止其它使用很多颜色的应用程序，或者在启动 gvim 之后启动它
们。已知很多浏览器会消耗很多颜色。要避免这个问题，你可以告诉 netscape 使用自己
的颜色映射表:
<code class="section">        netscape -install </code>
或者告诉它只使用有限种的颜色 (64 应该足够了):
<code class="section">        netscape -ncols 64 </code>
这也可以通过 Xdefaults 文件设置:
<code class="section">        Netscape*installColormap: Yes </code>
或者
<code class="section">        Netscape*maxImageColors:  64 </code>
&lt;
                                                        <b class="vimtag"> <a name="E79">E79</a> </b>
<code class="section">  Cannot expand wildcards </code>

文件名包含特殊的字符组合，Vim 因而试图进行通配符扩展但不成功。这 <code class="emphasis">不</code> 意味着没有
匹配的文件名，只是说该模式是非法的。

                                                        <b class="vimtag"> <a name="E459">E459</a> </b>
<code class="section">  Cannot go back to previous directory </code>

在扩展文件名的时候，Vim 不能回到最近用过的目录名。所有正在使用的文件名现在都可
能成为非法！你需要得到当前目录的可执行 (遍历) 权限。

                                                        <b class="vimtag"> <a name="E190">E190</a> </b> <b class="vimtag"> <a name="E212">E212</a> </b>
<code class="section">  Cannot open "<code class="special">{filename}</code>" for writing </code>
<code class="section">  Can't open file for writing </code>

由于某种原因，你要写入的文件不能建立或者覆盖。这可能是因为你没有目录的写权限，
或者该文件名不合法。

                                                        <b class="vimtag"> <a name="E166">E166</a> </b>
<code class="section">  Can't open linked file for writing </code>

你试图写入文件，但该文件无法被覆盖，且该文件是链接类型 (硬链接或者符号链接)。
其实，包含该链接或文件的目录可写的时候并非不可写入。只不过 Vim 不知道你是要删
除该链接并在同样的位置写入实际文件呢，还是要删除链接到的文件并用新文件覆盖之。
如果你确实需要用这个名字写入文件，请手动删除这个链接或者文件，或者改变权限，使
得 Vim 可以对它进行覆盖。

                                                        <b class="vimtag"> <a name="E46">E46</a> </b>
<code class="section">  Cannot change read-only variable "<code class="special">{name}</code>" </code>

你试图给一个函数参数  <a href="userfunc.html#a:var">a:var</a>  或者 Vim 的内部只读变量  <a href="eval.html#v:var">v:var</a>  赋值。

                                                        <b class="vimtag"> <a name="E90">E90</a> </b>
<code class="section">  Cannot unload last buffer </code>

Vim 要求必须有一个载入的缓冲区，不然窗口中就没有东西可以显示了。

                                                        <b class="vimtag"> <a name="E40">E40</a> </b>
<code class="section">  Can't open errorfile <code class="special">&lt;filename&gt;</code> </code>

使用 ":make" 或者 ":grep" 命令时: 不能打开用于保存错误信息或者 grep 的输出结果
的文件。可能原因如下:
- <a href="options.html#'shellredir'">'shellredir'</a> 的值不正确。
- 外壳改变了目录，使得错误文件写到别的目录里。这可以通过改变 <a href="options.html#'makeef'">'makeef'</a> 修正，但
  是 make 命令还是在错误的目录下执行。
- <a href="options.html#'makeef'">'makeef'</a> 的值不正确。
- <a href="options.html#'grepprg'">'grepprg'</a> 或者 <a href="options.html#'makeprg'">'makeprg'</a> 不能执行。这一点不一定总能检测到 (尤其在 MS-Windows
  上)。检查你的 $PATH。


<code class="section">  Can't open file C:\TEMP\VIoD243.TMP </code>

MS-Windows 上，期待读入外部命令输出的结果但是命令没有正确执行时会显示此信息。
这可能有多种原因。检查 <a href="options.html#'shell'">'shell'</a>、<a href="options.html#'shellquote'">'shellquote'</a>、<a href="options.html#'shellxquote'">'shellxquote'</a>、<a href="options.html#'shellslash'">'shellslash'</a> 和相
关的选项。这个消息也有可能是由找不到外部命令引起的。但错误信息无法区别。

                                                        <b class="vimtag"> <a name="E12">E12</a> </b>
<code class="section">  Command not allowed from exrc/vimrc in current dir or tag search </code>

因为安全原因，有的命令不允许被执行。这些命令通常来自当前目录的 .exrc 或者
.vimrc 文件或标签文件。另见 <a href="options.html#'secure'">'secure'</a>。

                                                        <b class="vimtag"> <a name="E74">E74</a> </b>
<code class="section">  Command too complex </code>

某个映射产生了太长的命令行字符串。可能是因为一个映射间接的引用了自己。


<code class="example">  CONVERSION ERROR</code>
<code class="example"></code>
写入文件时，这个错误消息的出现意味着部分内容在从内部 UTF-8 格式转化到文件本身
格式的过程中丢失。文件因此不会被标为未修改。如果你关心丢失的信息，把
<a href="options.html#'fileencoding'">'fileencoding'</a> 选项设为别的能够处理缓冲区的字符的值并重新写一次。如果你觉得无
所谓，直接放弃缓冲区或者复位 <a href="options.html#'modified'">'modified'</a> 选项。

                                                        <b class="vimtag"> <a name="E302">E302</a> </b>
<code class="section">  Could not rename swap file </code>

如果文件名改变，Vim 试图对  <a href="recover.html#swap-file">swap-file</a>  也进行换名。如果不成功，那么依然使用旧
的交换文件。一般情况下这没有什么问题。

                                                        <b class="vimtag"> <a name="E43">E43</a> </b> <b class="vimtag"> <a name="E44">E44</a> </b>
<code class="section">  Damaged match string </code>
<code class="section">  Corrupted regexp program </code>

Vim 的内部问题并因而产生了一个不合法的正则表达式。如果你知道如何重现，请报告。
 <a href="intro.html#bugs">bugs</a> 

                                                        <b class="vimtag"> <a name="E208">E208</a> </b> <b class="vimtag"> <a name="E209">E209</a> </b> <b class="vimtag"> <a name="E210">E210</a> </b>
<code class="section">  Error writing to "<code class="special">{filename}</code>" </code>
<code class="section">  Error closing "<code class="special">{filename}</code>" </code>
<code class="section">  Error reading "<code class="special">{filename}</code>" </code>

如果 Vim 试图给一个文件换名，但是简单的文件名更名不能工作时，会尝试进行文件复
制，这些错误消息出现在这一步也失败的时候。结果可能是，原始文件和目标文件都存
在，但是目标文件不完整。


<code class="section">  Vim: Error reading input, exiting... </code>

Vim 在需要输入却不能读入键入的字符时，就会报错。Vim 没法继续，除了退出以外别无
选择。这可能发生在标准输入和标准错误 (stderr) 都被重定向，而一个自身不会退出
Vim 的脚本被执行的情况。

                                                        <b class="vimtag"> <a name="E47">E47</a> </b>
<code class="section">  Error while reading errorfile </code>

不能读入错误文件。此消息的发生 <code class="emphasis">不</code> 是因为错误信息不能识别。

                                                        <b class="vimtag"> <a name="E80">E80</a> </b>
<code class="section">  Error while writing </code>

文件的写入不能成功完成，该文件可能不完整。

                                                        <b class="vimtag"> <a name="E13">E13</a> </b> <b class="vimtag"> <a name="E189">E189</a> </b>
<code class="section">  File exists (add ! to override) </code>
<code class="section">  "<code class="special">{filename}</code>" exists (add ! to override) </code>

系统为了保护你，不让你不小心覆盖已存在文件。如有必要，使用相同的命令但在其后加
"!"。例如: 
<code class="example">        :w /tmp/test</code>
可以改成: 
<code class="example">        :w! /tmp/test</code>

                                                        <b class="vimtag"> <a name="E768">E768</a> </b>
<code class="section">  Swap file exists: <code class="special">{filename}</code> (:silent! overrides) </code>

系统能够保护你不去覆盖一个正在被 Vim 编辑的文件。在使用 ":w! filename" 并且发
现一个交换文件时会出现这种情况。
- 如果交换文件是由以前某个崩溃的编辑对话留下的，也许你希望删除这个交换文件。编
  辑 <code class="special">{filename}</code> 来找出关于该交换文件的信息。
- 如果你希望强行保存，那么在命令前加 ":silent!"。例如: 
<code class="example">        :silent! w! /tmp/test</code>
  之所以需要这个特殊命令，是因为你已经用 ! 来覆盖已经存在的文件了。

                                                        <b class="vimtag"> <a name="E139">E139</a> </b>
<code class="section">  File is loaded in another buffer </code>

你试图写入文件，但是别的缓冲区正在使用你写入的名字。不这么做会导致相同文件的两
个版本。

                                                        <b class="vimtag"> <a name="E142">E142</a> </b>
<code class="section">  File not written: Writing is disabled by <a href="options.html#'write'">'write'</a> option </code>

<a href="options.html#'write'">'write'</a> 选项被关闭。这使得所有试图写入文件的命令都会产生这个消息。这可能由
 <a href="starting.html#-m">-m</a>  命令行参数引起。你可以用 ":set write" 打开 <a href="options.html#'write'">'write'</a> 选项。

                                                        <b class="vimtag"> <a name="E25">E25</a> </b>
<code class="section">  GUI cannot be used: Not enabled at compile time </code>

你运行的 Vim 版本不支持 GUI 代码。所以 "gvim" 和 ":gui" 都不工作。

                                                        <b class="vimtag"> <a name="E49">E49</a> </b>
<code class="section">  Invalid scroll size </code>

这是由 <a href="options.html#'scroll'">'scroll'</a>、<a href="options.html#'scrolljump'">'scrolljump'</a> 或者 <a href="options.html#'scrolloff'">'scrolloff'</a> 选项的值不正确引起的。

                                                        <b class="vimtag"> <a name="E17">E17</a> </b>
<code class="section">  "<code class="special">{filename}</code>" is a directory </code>

你试图写入一个和目录名字相同的文件。这是不可以的。你可能想要附加一个文件名。

                                                        <b class="vimtag"> <a name="E19">E19</a> </b>
<code class="section">  Mark has invalid line number </code>

你使用一个位置标记，但它所指的行号不存在。这可能是因为你使用了指向别的文件的位
置标记，而别的程序删除了其中的一些行引起的。

                                                        <b class="vimtag"> <a name="E219">E219</a> </b> <b class="vimtag"> <a name="E220">E220</a> </b>
<code class="section">  Missing {. </code>
<code class="section">  Missing }. </code>

在文件名中使用了 <code class="special">{}</code> 构造，但只有 { 而没有匹配的 } 或者相反。该构造的使用方法
是: 用 <code class="special">{foo,bar}</code> 匹配 "foo" 和 "bar"。

                                                        <b class="vimtag"> <a name="E315">E315</a> </b>
<code class="section">  ml_get: invalid lnum: <code class="special">{number}</code> </code>

内部错误。如果你知道如何重现该问题，请提交漏洞报告。 <a href="intro.html#bugreport.vim">bugreport.vim</a> 。

                                                        <b class="vimtag"> <a name="E173">E173</a> </b>
<code class="section">  <code class="special">{number}</code> more files to edit </code>

你试图退出，但是参数列表里的末项还没有被编辑到。这保护你在还有文件要编辑的时候
意外的退出。见  <a href="editing.html#argument-list">argument-list</a> 。如果你坚持想退出，再试一次就行了。

                                                        <b class="vimtag"> <a name="E23">E23</a> </b> <b class="vimtag"> <a name="E194">E194</a> </b>
<code class="section">  No alternate file </code>
<code class="section">  No alternate file name to substitute for '#' </code>

轮换文件还没有定义。见  <a href="editing.html#alternate-file">alternate-file</a> 。

                                                        <b class="vimtag"> <a name="E32">E32</a> </b>
<code class="section">  No file name </code>

当前的缓冲区还没有名字。要写入，可用 ":w fname"。或者用 ":file fname" 先给出缓
冲区的名字。

                                                        <b class="vimtag"> <a name="E141">E141</a> </b>
<code class="section">  No file name for buffer <code class="special">{number}</code> </code>

一个被改变的缓冲区没有文件名。所以不能被写入。你需要先给缓冲区一个文件名: 
<code class="example">        :buffer {number}</code>
<code class="example">        :file {filename}</code>

                                                        <b class="vimtag"> <a name="E33">E33</a> </b>
<code class="section">  No previous substitute regular expression </code>

在 ":substitute" 命令里，模式里使用的 '~' 字符会被替换成上次用到的模式。如果这
个命令还没用过，就会失败。见  <a href="pattern.html#%2F%7E">/~</a> 。如果使用 ":s/pat/%/"，也会发生类似问题，其
中的 "%" 表示上次的替代字符串。

                                                        <b class="vimtag"> <a name="E35">E35</a> </b>
<code class="section">  No previous regular expression </code>

使用空搜索模式会引用上次用到的模式。如果没有上一次搜索，那么就会失败。

                                                        <b class="vimtag"> <a name="E24">E24</a> </b>
<code class="section">  No such abbreviation </code>

你使用了 ":unabbreviate" 命令，但是所带的参数不是一个已有的缩写。这个命令的各
种变形 ":cunabbrev"、":iunabbrev" 等都会给出相同的消息。检查一下尾部的空白。


<code class="example">  /dev/dsp: No such file or directory</code>
<code class="example"></code>
只有在带 Gnome 支持的 GTK GUI 才会给出。Gnome 试图使用音频设备但是它不存在。你
可以忽略这个错误。

                                                        <b class="vimtag"> <a name="E31">E31</a> </b>
<code class="section">  No such mapping </code>

你使用了 ":unmap" 命令，但是所带的参数不是已有的映射。这个命令的各种变形
":cunmap"、":unmap!" 等都会给出相同的消息。一些提示:
- 检查一下尾部的空白。
- 如果是局部于缓冲区的映射，需要使用 ":unmap <code class="special">&lt;buffer&gt;</code>"。
   <a href="map.html#:map-%3Cbuffer%3E">:map-&lt;buffer&gt;</a> 

                                                        <b class="vimtag"> <a name="E37">E37</a> </b> <b class="vimtag"> <a name="E89">E89</a> </b>
<code class="section">  No write since last change (add ! to override) </code>
<code class="section">  No write since last change for buffer <code class="special">{N}</code> (add ! to override) </code>

你试图放弃  <a href="editing.html#abandon">abandon</a>  一个有过改动的文件。Vim 不让你这么做，以免丢失你的工作。
你可以把改动的部分用 ":w" 写回，如果你坚持要放弃而不介意并丢失所有的改变，可以
在使用的命令之后加上 '!' 字符。例如: 
<code class="example">        :e other_file</code>
可以改为: 
<code class="example">        :e! other_file</code>

                                                        <b class="vimtag"> <a name="E162">E162</a> </b>
<code class="section">  No write since last change for buffer "<code class="special">{name}</code>" </code>

如果你退出 Vim 时有的缓冲区已经被改变了就会发生这个错误。你或者可以写入改动过
的缓冲区 (用  <a href="editing.html#:w">:w</a> )，或者可以用一个强迫放弃缓冲区的命令，比如，":qa!"。要小心，
不要丢掉你想保留的改变。有些缓冲区可能已经被忘记了，尤其是置位了 <a href="options.html#'hidden'">'hidden'</a> 的时
候。


<code class="example">  [No write since last change]</code>
<code class="example"></code>
如果你执行 Shell 命令时至少一个缓冲区被改变了，就会发生这个错误。要不想显示这
个信息，可以复位 <a href="options.html#'warn'">'warn'</a> 选项。

                                                        <b class="vimtag"> <a name="E38">E38</a> </b>
<code class="section">  Null argument </code>

Vim 内部出错，产生一个 NULL 指针。如果你知道如何重现，请报告。 <a href="intro.html#bugs">bugs</a> 

                                                <b class="vimtag"> <a name="E41">E41</a> </b> <b class="vimtag"> <a name="E82">E82</a> </b> <b class="vimtag"> <a name="E83">E83</a> </b> <b class="vimtag"> <a name="E342">E342</a> </b>
<code class="section">  Out of memory! </code>
<code class="section">  Out of memory!  (allocating <code class="special">{number}</code> bytes) </code>
<code class="section">  Cannot allocate any buffer, exiting... </code>
<code class="section">  Cannot allocate buffer, using other one... </code>

噢，噢。你可能作了一些特别复杂的操作，或者有其它程序正在占用你的内存。小心！
Vim 没有完全准备好内存溢出的情况。首先确保所有的改变被保存。然后试图解决内存的
短缺问题。要确保安全无虞，先退出 Vim，再重新开始。

如果这发生在 Vim 还在初始化时，文件编辑很可能不行，所以 Vim 会以值 123 退出。

缓冲区只是部分保存在内存里，所以编辑一个很大的文件不太可能导致内存溢出错误。撤
销信息则是完全保存在内存里，可以用以下选项减少内存的占用:
- <a href="options.html#'undolevels'">'undolevels'</a>  设为较小的值，或 -1 以完全关闭之。对影响所有行的改变这会很有帮
  助。
- <a href="options.html#'undoreload'">'undoreload'</a> 设为零以关闭之。

                                                        <b class="vimtag"> <a name="E339">E339</a> </b>
<code class="section">  Pattern too long </code>

这发生在 16 位整数的系统上: 编译的正则表达式模式超过了 65000 个字节。试试短一
些的模式。
这也可能发生在某个规则的偏移量超出了可用的空间。试试对模式进行简化。

                                                        <b class="vimtag"> <a name="E45">E45</a> </b>
<code class="section">  <a href="options.html#'readonly'">'readonly'</a> option is set (add ! to override) </code>

你试图写入一个标为只读的文件。如果要坚持这么做，或者复位 <a href="options.html#'readonly'">'readonly'</a> 选项，或者
在你用的命令后面增加 '!' 字符。例如: 
<code class="example">        :w</code>
可以改为: 
<code class="example">        :w!</code>

                                                        <b class="vimtag"> <a name="E294">E294</a> </b> <b class="vimtag"> <a name="E295">E295</a> </b> <b class="vimtag"> <a name="E301">E301</a> </b>
<code class="section">  Read error in swap file </code>
<code class="section">  Seek error in swap file read </code>
<code class="section">  Oops, lost the swap file!!! </code>

Vim 试图从  <a href="recover.html#swap-file">swap-file</a>  里读取文本时出了问题。相关缓冲区的文本现在可能已经没法
用了！在写入缓冲区之前仔细检查。你可以先写到别的文件上，然后比较两者的差异。

                                                        <b class="vimtag"> <a name="E192">E192</a> </b>
<code class="section">  Recursive use of :normal too deep </code>

你在使用 ":normal" 命令，而它的参数又递归使用 ":normal" 命令。<a href="options.html#'maxmapdepth'">'maxmapdepth'</a> 限
制最高的递归层数。下例显示如何得到这个消息: 
<code class="example">        :map gq :normal gq&lt;CR&gt;</code>
如果你输入 "gq"，就会执行这个映射，它又会再次调用 "gq"。

                                                        <b class="vimtag"> <a name="E22">E22</a> </b>
<code class="section">  Scripts nested too deep </code>

脚本可以通过 "-s" 命令行参数或者 ":source!" 命令读取。脚本又可以读取别的脚本。
这可以继续大概 14 层。如果需要更多的嵌套，Vim 假设其中出现了递归的循环，所以用
此错误信息停止。

                                                        <b class="vimtag"> <a name="E319">E319</a> </b>
<code class="section">  Sorry, the command is not available in this version </code>

你使用了目前使用的 Vim 版本不存在的命令。在编译 Vim 的时候，许多不同的特性可以
打开或者关闭。这取决于编译时选择要多大的 Vim，还有具体操作系统。能用的特性可见
 <a href="various.html#+feature-list">+feature-list</a> 。 <a href="various.html#:version">:version</a>  命令显示 Vim 编译时所带的特性。

                                                        <b class="vimtag"> <a name="E300">E300</a> </b>
<code class="section">  Swap file already exists (symlink attack?) </code>

当 Vim 试图打开交换文件并发现它已经存在，而且是一个符号链接时，显示该错误。这
不应该发生，因为 Vim 已经检查过该文件不存在。除非别人同时打开了相同的文件 (非
常不太可能) 或者有人试图一个符号链接攻击 (如果编辑 /tmp 下的文件或者
<a href="options.html#'directory'">'directory'</a> 以 "/tmp" 开始时可能发生。这是一个坏的选择)。

                                                        <b class="vimtag"> <a name="E432">E432</a> </b>
<code class="section">  Tags file not sorted: {file name} </code>

Vim (和 Vi) 期待标签文件以 ASCII 顺序排序。然后可以使用二分法搜索，这比线性查
找快很多。如果你的标签文件没有适当的排序，复位  <a href="options.html#'tagbsearch'">'tagbsearch'</a>  选项。
这个消息只有在 Vim 在搜索标签时发生问题的时候才会给出。有的时候即使标签文件没
有适当排序，这个消息也不会给出。

                                                        <b class="vimtag"> <a name="E424">E424</a> </b>
<code class="section">  Too many different highlighting attributes in use </code>

Vim 只能处理 223 种不同的高亮。如果遇到了这个限制，你一定用了太多的带不同参数
的  <a href="syntax.html#:highlight">:highlight</a>  命令。":highlight link" 不计算在内。

                                                        <b class="vimtag"> <a name="E77">E77</a> </b>
<code class="section">  Too many file names </code>

在扩展文件名的时候，找到了多于一个的匹配。而使用的命令只支持单一匹配的参数。

                                                        <b class="vimtag"> <a name="E303">E303</a> </b>
<code class="section">  Unable to open swap file for "<code class="special">{filename}</code>", recovery impossible </code>

Vim 不能建立交换文件。你可以继续编辑该文件，但如果 Vim 不正常地退出，你所有的
改变就丢失了。同时，Vim 可能在编辑大文件时消耗大量的内存。要避免这个错误，你可
能想改变 <a href="options.html#'directory'">'directory'</a> 选项。当 <a href="options.html#'directory'">'directory'</a> 为空时不给出此错误。见  <a href="recover.html#swap-file">swap-file</a> 。

                                                        <b class="vimtag"> <a name="E140">E140</a> </b>
<code class="section">  Use ! to write partial buffer </code>

将区域对应缓冲区的部分内容写到一个已有的文件是不常见的。这可能是个错误 (比如，
如果在可视模式下使用 ":w" 的时候)，所以 Vim 需要在命令后使用 !，比如:
":3,10w!"。


<code class="section">  Warning: Cannot convert string "<code class="special">&lt;Key&gt;</code>Escape,_Key_Cancel" to type </code>
<code class="section">  VirtualBinding </code>

启动时的时候可能出现这样的错误。这不是 Vim 的问题，而是你的 X11 配置有问题。你
可以在这里看到如何解决这个问题的提示:
<a href="http://groups.yahoo.com/group/solarisonintel/message/12179">http://groups.yahoo.com/group/solarisonintel/message/12179</a>。
[此 URL 已不可用]

                                                        <b class="vimtag"> <a name="W10">W10</a> </b>
<code class="section">  Warning: Changing a readonly file </code>

文件是只读的，而你坚持要修改它。你可以用  <a href="autocmd.html#FileChangedRO">FileChangedRO</a>  自动命令事件来避免这
个消息 (该自动命令必须复位 <a href="options.html#'readonly'">'readonly'</a> 选项)。<a href="options.html#'modifiable'">'modifiable'</a> 可以完全禁止修改文
件。
只有 <a href="options.html#'readonly'">'readonly'</a> 置位后第一次作改变时，才显示这条消息。

                                                        <b class="vimtag"> <a name="W13">W13</a> </b>
<code class="section">  Warning: File "<code class="special">{filename}</code>" has been created after editing started </code>

你在 Vim 里开始编辑文件时它并不存在，但是现在存在了。你可以决定保留 Vim 的版本
还是新建的文件。这个消息在 <a href="options.html#'buftype'">'buftype'</a> 非空的时候不会给出。

                                                        <b class="vimtag"> <a name="W11">W11</a> </b>
<code class="section">  Warning: File "<code class="special">{filename}</code>" has changed since editing started </code>

你已经开始编辑的文件现在有了别的时间戳 (修改时间)，而且内容也发生了改变 (更精
确地说，使用当前选项设置和自动命令重新读入文件会给你不同的文本)。这可能是因为
别的程序修改了文件。你需要自己研究发生了什么事，并决定保留哪个版本的内容。如果
你想自动处理，参见 <a href="options.html#'autoread'">'autoread'</a> 选项。如果 <a href="options.html#'buftype'">'buftype'</a> 不为空，该消息不会给出。
另见  <a href="autocmd.html#FileChangedShell">FileChangedShell</a>  自动命令。

有一种情况即使没发生任何错误也会得到这个消息: 在 Windows 上，你在夏令时开始的
那天保存一个文件。有几种方法可以修正之:
- 在你的 autoexec.bat 增加这行: 
<code class="example">           SET TZ=-1</code>
  根据你的时区调整 "-1" 为其它值。
- 关闭 "根据夏令时时间自动调整时钟"。
- 第二天再次写入文件。或者把时钟设为第二天，写入文件两次，再把时钟调回来。

如果你不停收到 W11，可能需要关闭 "Acronis Active Protection" 或把 Vim 登记为受
信任的服务/应用。

                                                        <b class="vimtag"> <a name="W12">W12</a> </b>
<code class="section">  Warning: File "<code class="special">{filename}</code>" has changed and the buffer was changed in Vim as well </code>

和上面类似，而这个 Vim 里这个文件的缓冲区也改变了。你必须决定要保留这个 Vim 的
版本还是磁盘上的。这个消息在 <a href="options.html#'buftype'">'buftype'</a> 非空时不会给出。

                                                        <b class="vimtag"> <a name="W16">W16</a> </b>
<code class="section">  Warning: Mode of file "<code class="special">{filename}</code>" has changed since editing started </code>

缓冲区的时间戳发生了改变时，内容保持不变但是模式 (许可权限) 发生了改变。这通常
是从版本控制系统里取出文件而复位了只读位引起的。重读文件应该是安全的选择。置位
<a href="options.html#'autoread'">'autoread'</a> 可以自动重读文件。

                                                        <b class="vimtag"> <a name="E211">E211</a> </b>
<code class="section">  File "<code class="special">{filename}</code>" no longer available </code>

你已经开始编辑的文件现在不再存在或不能访问。确定你把缓冲区写到某处，以免丢失改
动。如果 <a href="options.html#'buftype'">'buftype'</a> 非空，该消息不会给出。

                                                        <b class="vimtag"> <a name="W14">W14</a> </b>
<code class="section">  Warning: List of file names overflow </code>

你一定用了太多的缓冲区了。可能两个缓冲区使用相同的号码，这会引起问题。你可能要
退出 Vim 并重启。

                                                        <b class="vimtag"> <a name="E931">E931</a> </b>
<code class="section">  Buffer cannot be registered </code>

内存溢出，或者重复的缓冲区号。可能在 W14 之后出现。查找缓冲区不总是有效，最好
重启 Vim。

                                                        <b class="vimtag"> <a name="E296">E296</a> </b> <b class="vimtag"> <a name="E297">E297</a> </b>
<code class="section">  Seek error in swap file write </code>
<code class="section">  Write error in swap file </code>

这通常是因为磁盘空间满引起的。Vim 不能把文本写入  <a href="recover.html#swap-file">swap-file</a>  。它本身并无害，
但如果 Vim 意外退出，有些文本可能丢失，而无法恢复。如果这个问题持续存在，Vim
可能会内存溢出。

                                                <b class="vimtag"> <a name="connection-refused">connection-refused</a> </b>
<code class="section">  Xlib: connection to "&lt;machine-name:0.0" refused by server </code>

当 Vim 试图连接到 X 服务器，但是 X 服务器不允许连接的时候，就会发生这个错误。
只有建立 X 服务器的连接才能恢复标题和得到 xterm 的剪贴板的支持。不幸的是，这
个错误信息无法避免，除非关闭  <a href="various.html#+xterm_clipboard">+xterm_clipboard</a>  和  <a href="various.html#+X11">+X11</a>  特性。

                                                        <b class="vimtag"> <a name="E10">E10</a> </b>
<code class="section">  \\ should be followed by /, ? or &amp; </code>

命令行以反斜杠开始，或者命令的范围包含了在错误位置出现的反斜杠。通常，这是因为
命令行的续行功能被关闭了。从 <a href="options.html#'cpoptions'">'cpoptions'</a> 选项里去掉 'C' 标志位就可以打开这一功
能。使用 ":set nocp" 也可。

                                                        <b class="vimtag"> <a name="E471">E471</a> </b>
<code class="section">  Argument required </code>

这是由 Ex 命令执行时需要的参数没有提供引起的。

                                                        <b class="vimtag"> <a name="E474">E474</a> </b> <b class="vimtag"> <a name="E475">E475</a> </b> <b class="vimtag"> <a name="E983">E983</a> </b>
<code class="section">  Invalid argument </code>
<code class="section">  Invalid argument: <code class="special">{arg}</code> </code>
<code class="section">  Duplicate argument: <code class="special">{arg}</code> </code>

执行 Ex 命令或函数时使用了非法的参数。

                                                        <b class="vimtag"> <a name="E488">E488</a> </b>
<code class="section">  Trailing characters </code>
<code class="section">  Trailing characters: <code class="special">{text}</code> </code>

在不允许有参数的 Ex 命令后带了参数。或者参数有非法字符而不能识别。

                                                        <b class="vimtag"> <a name="E477">E477</a> </b> <b class="vimtag"> <a name="E478">E478</a> </b>
<code class="section">  No ! allowed </code>
<code class="section">  Don't panic! </code>

给不支持带 ! 后缀的 Ex 命令加了 "!" 命令。

                                                        <b class="vimtag"> <a name="E481">E481</a> </b>
<code class="section">  No range allowed </code>

在不支持范围参数的 Ex 命令前加了范围。见  <a href="cmdline.html#cmdline-ranges">cmdline-ranges</a> 。

                                                        <b class="vimtag"> <a name="E482">E482</a> </b> <b class="vimtag"> <a name="E483">E483</a> </b>
<code class="section">  Can't create file <code class="special">{filename}</code> </code>
<code class="section">  Can't get temp file name </code>

Vim 不能建立临时文件。

                                                        <b class="vimtag"> <a name="E484">E484</a> </b> <b class="vimtag"> <a name="E485">E485</a> </b>
<code class="section">  Can't open file <code class="special">{filename}</code> </code>
<code class="section">  Can't read file <code class="special">{filename}</code> </code>

Vim 不能读临时文件。特别是在 Windows 上，这可能由错误转义 cmd.exe 的中特殊字符
引起。 7.3.443 补丁对转义的方法有所改变。对  <a href="builtin.html#system()">system()</a>  的所有外壳参数应有
 <a href="builtin.html#shellescape()">shellescape()</a>  进行转义，或直接用 ^ 转义。另见 <a href="options.html#'shellxquote'">'shellxquote'</a> 和
<a href="options.html#'shellxescape'">'shellxescape'</a>。

                                                        <b class="vimtag"> <a name="E464">E464</a> </b>
<code class="section">  Ambiguous use of user-defined command </code>

有两个用户定义的命令，它们有相同的前缀，而你用命令行补全来执行其中的一个。
 <a href="map.html#user-cmd-ambiguous">user-cmd-ambiguous</a> 
示例: 
<code class="example">        :command MyCommand1 echo "one"</code>
<code class="example">        :command MyCommand2 echo "two"</code>
<code class="example">        :MyCommand</code>

                                                        <b class="vimtag"> <a name="E492">E492</a> </b>
<code class="section">  Not an editor command </code>

你试图执行一个既不是 Ex 命令也不是用户定义的命令。

                                                        <b class="vimtag"> <a name="E943">E943</a> </b>
<code class="section">  Command table needs to be updated, run 'make cmdidxs' </code>

只可能在修改了源代码，在 src/ex_cmds.h 中增加了新命令时发生。此时需要更新查找
表，运行: 
<code class="example">        make cmdidxs</code>

                                                <b class="vimtag"> <a name="E928">E928</a> </b> <b class="vimtag"> <a name="E889">E889</a> </b>
<code class="section">  E928: String required </code>
<code class="section">  E889: Number required </code>

使用的值或表达式与预期的类型不符。

</section><hr class="doubleline" /><section class=inner>
<h4>3. 消息                                                 <b class="vimtag"> <a name="messages">messages</a> </b></h4>
这是一个 (不完全) Vim 给出的各种消息的总览:

                        <b class="vimtag"> <a name="hit-enter">hit-enter</a> </b> <b class="vimtag"> <a name="press-enter">press-enter</a> </b> <b class="vimtag"> <a name="hit-return">hit-return</a> </b>
                        <b class="vimtag"> <a name="press-return">press-return</a> </b> <b class="vimtag"> <a name="hit-enter-prompt">hit-enter-prompt</a> </b>

<code class="section">  Press ENTER or type command to continue </code>

如果屏幕上有东西要你阅读，而屏幕即将刷新的时候，就会给出该消息:
- 执行完外部命令以后 (例如，":!ls" 和 "=")。
- 状态行显示的内容超过了窗口的宽度或者跨越到 <a href="options.html#'showcmd'">'showcmd'</a> 或者 <a href="options.html#'ruler'">'ruler'</a> 的输出位
  置。

-&gt; 按 <code class="special">&lt;Enter&gt;</code> 或者 <code class="special">&lt;Space&gt;</code> 可以重画屏幕并继续，除此以外就像该键没按过一样。
-&gt; 按 ":" 或者其它普通模式的命令字符开始执行该命令。<code class="note">注意</code> 在外部命令执行之后，
   某些特殊键，例如光标键，可能不能正常工作，这是因为终端此时仍然处于执行外部
   命令的状态。
-&gt; 按 'k'、<code class="special">&lt;Up&gt;</code>、'u'、'b' 或 'g' 可以使消息回滚。这和  <a href="message.html#more-prompt">more-prompt</a>  中的工作方
   式一样。只有关闭 <a href="options.html#'compatible'">'compatible'</a> 并且打开 <a href="options.html#'more'">'more'</a> 时才有效。
-&gt; 消息的滚动离开屏幕的顶部时，按 'j'、'f'、'd' 或 <code class="special">&lt;Down&gt;</code> 没有效果，
   <a href="options.html#'compatible'">'compatible'</a> 关闭且 <a href="options.html#'more'">'more'</a> 打开。这是为了避免按 'j' 或 'f' 太多而使得消息完
   全消失。
-&gt; 按 <code class="special">&lt;C-Y&gt;</code> 复制 (抽出) 一个无模式的选择到剪贴板寄存器中。
-&gt; 使用菜单。应用命令行模式定义的字符。
-&gt; 如果 <a href="options.html#'mouse'">'mouse'</a> 包含 'r' 标志位，按鼠标左键和按 <code class="special">&lt;Space&gt;</code> 效果相同。不过这使得选
   择文本成为不可能。
-&gt; GUI 模式上，在末行按鼠标左键和按 <code class="special">&lt;Space&gt;</code> 效果相同。

如果你不小心按了 <code class="special">&lt;Enter&gt;</code> 或 <code class="special">&lt;Space&gt;</code>，而你还想看显示的消息，可以使用  <a href="message.html#g%3C">g&lt;</a> 。这个
命令只有 <a href="options.html#'more'">'more'</a> 置位时才有效。

要减少 hit-enter 提示的次数:
- 把 <a href="options.html#'cmdheight'">'cmdheight'</a> 设为 2 或者更高。
- 在 <a href="options.html#'shortmess'">'shortmess'</a> 里增加标志位。
- 复位 <a href="options.html#'showcmd'">'showcmd'</a> 和/或 <a href="options.html#'ruler'">'ruler'</a>。
- 确保  <a href="eval.html#:echo">:echo</a>  文本不长于  <a href="eval.html#v:echospace">v:echospace</a>  屏幕单元格。

如果脚本导致出现按回车的提示而你不明所以， <a href="eval.html#v:scrollstart">v:scrollstart</a>  变量可能很有用。

另见 <a href="options.html#'mouse'">'mouse'</a>。hit-enter 消息使用  <a href="syntax.html#hl-Question">hl-Question</a>  高亮组。


                                                <b class="vimtag"> <a name="more-prompt">more-prompt</a> </b> <b class="vimtag"> <a name="pager">pager</a> </b>
<code class="section">  -- More -- </code>
<code class="section">  -- More -- SPACE/d/j: screen/page/line down, b/u/k: up, q: quit </code>

如果屏幕被消息全部占据，本消息就可能出现。只有在 <a href="options.html#'more'">'more'</a> 选项打开的时候它才会出
现。它的显示使用  <a href="syntax.html#hl-MoreMsg">hl-MoreMsg</a>  高亮组。

<code class="section">输入                                    效果 </code>
     <code class="special">&lt;CR&gt;</code> 或 <code class="special">&lt;NL&gt;</code> 或 j 或 <code class="special">&lt;Down&gt;</code>        下一行
     d                                  下一页 (半屏)
     <code class="special">&lt;Space&gt;</code> 或 f 或 <code class="special">&lt;PageDown&gt;</code>         下一屏
     G                                  一直往下，直到出现按回车的提示

     <code class="special">&lt;BS&gt;</code> 或 k 或 <code class="special">&lt;Up&gt;</code>                  往回一行
     u                                  往上一页 (半屏)
     b 或 <code class="special">&lt;PageUp&gt;</code>                      上一屏
     g                                  回到开始处

     q、<code class="special">&lt;Esc&gt;</code> 或 <code class="keystroke">CTRL-C</code>                 终止列表
     :                                  终止列表并进入命令行
    <code class="special">&lt;C-Y&gt;</code>                               抽出 (复制) 无模式的选择
                                         <a href="gui.html#modeless-selection">modeless-selection</a>  到剪贴板
                                        ("* 和 "+ 寄存器)
    <code class="special">{menu-entry}</code>                        命令行模式里定义的菜单项。
    <code class="special">&lt;LeftMouse&gt;</code>                         下页 (*)

所有其它的键保留它们本来的含义。

(*) 鼠标左键的点击只有在以下情况下才生效:
     - GUI: 屏幕的最后一行。
     - <a href="options.html#'mouse'">'mouse'</a> 里定义了 'r' (不过这时文本选择不会工作)。


<code class="note">注意</code>: 键的输入是直接从终端取得的。它不通过映射，预输入也被忽略。

 <a href="message.html#g%3C">g&lt;</a>  命令用于查看前一个命令输出的最后一页。如果在提示按回车的时候不小心按了空
格 <code class="special">&lt;Space&gt;</code> 键，那么该命令尤其有用。

 vim:tw=78:ts=8:noet:ft=help:norl:
</section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
